package com.example.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;

//用来生成令牌的工具类
public class JwtUtil {
    private static final String secret = "1111122222233333444445555544444555552222223333311111222222333334444455555"; // 用于签名的密钥
    private static final long expiration = 86400000; // 过期时间，单位为毫秒（这里设置为一天）

    //生成登录的jwt
    public static String generateToken(String openId) {
        Date now = new Date();//登录时间
        Date expirationDate = new Date(now.getTime() + expiration);//过期时间
        return Jwts.builder().
                //设置openId
                setSubject(openId).
                //设置创建时间
                setIssuedAt(now).
                //设置过期时间
                setExpiration(expirationDate).
                //使用HS256算法签名
                signWith(SignatureAlgorithm.HS256, secret)
                //生成token
                .compact();
    }
    //解密登录的token信息
    public static String getOpenIdByToken(String token) {
        Claims claims = Jwts.parser()
                //设置签名密钥
                .setSigningKey(secret)
                //解析token
                .parseClaimsJws(token)
                //获取token中的主体
                .getBody();
        //返回openid
        return claims.getSubject();
    }

    //验证token信息
    public static Boolean validateToken(String token) {
        //判断token是否过期
        return Jwts.parser()
                //设置签名密钥
                .setSigningKey(secret)
                //解析token
                .parseClaimsJws(token)
                //获取token中的信息
                .getBody()
                //获取token的过期时间 与当前时间比较 判断是否到达过期时间
                .getExpiration().after(new Date());

    }

}